package com.ruoyi.student.utils;

import com.ruoyi.dictionaries.domain.Regions;
import com.ruoyi.student.domain.StudentInfoImport;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @author Mr.Guo
 * @school XJNU
 * @date 2025/6/24 17:11
 */
//配置校验工具类

public class importUtils {
    // 学校编码
    private static final String SCHOOL_CODE = "10762";

    private importUtils(){
        //防止实例化
    }
    public static void getRegion(List<StudentInfoImport> studentInfoImportList, List<Regions> regionList){
        for(StudentInfoImport studentInfoImport : studentInfoImportList){
            boolean flag = false;
            for(Regions region : regionList){
                if(studentInfoImport.getHkszdm().equals(region.getId())){
                    flag = true;
                }
            }
            if(!flag){
                studentInfoImport.setJyzt(studentInfoImport.getJyzt()+"  户口所在地码有问题，请检查！\n");
                studentInfoImport.setDrzt("导入失败");
            }
        }

    }
    //身份证号长度与地域校验
    public static void getCard(List<StudentInfoImport> studentInfoImportList){
        //身份证号长度校验
        for(StudentInfoImport studentInfoImport : studentInfoImportList){
            if(studentInfoImport.getZjhm().length() != 18){
                studentInfoImport.setJyzt(studentInfoImport.getJyzt()+"  身份证号长度有误，请检查！\n");
                studentInfoImport.setDrzt("导入失败");
            }
        }
    }
    //学号校验
    public static void getXh(List<StudentInfoImport> studentInfoImportList){
        for(StudentInfoImport studentInfoImport : studentInfoImportList){
            //校验长度
            if(studentInfoImport.getXh().length() != 15 || studentInfoImport.getXh() == null){
                studentInfoImport.setJyzt(studentInfoImport.getJyzt()+"  学号长度有误或学号为空，请检查！\n");
                studentInfoImport.setDrzt("导入失败");
            }// 校验前五位为学校编码10762
            else if(!studentInfoImport.getXh().startsWith(SCHOOL_CODE)){
                studentInfoImport.setJyzt(studentInfoImport.getJyzt()+"  学号前五位有误，请检查！\n");
                studentInfoImport.setDrzt("导入失败");
            }else {//校验学号是否全为数字
                for (int i = 0;i < studentInfoImport.getXh().length();i++){
                    if(!Character.isDigit(studentInfoImport.getXh().charAt(i))){
                        studentInfoImport.setJyzt(studentInfoImport.getJyzt()+"  学号有非数字字符，请检查！\n");
                        studentInfoImport.setDrzt("导入失败");
                    }
                }
            }
        }
    }
    // 出生日期导入
    public static void getBirthDateFromIdCard(List<StudentInfoImport> studentInfoImportList) {
        for (StudentInfoImport studentInfoImport : studentInfoImportList) {
            String idCard = studentInfoImport.getZjhm();

            // 检查身份证号是否为空或长度不正确
            if (idCard == null || idCard.length() != 18) {
                studentInfoImport.setJyzt(studentInfoImport.getJyzt() + "  身份证号格式错误，无法提取出生日期！\n");
                studentInfoImport.setDrzt("导入失败");
                continue;
            }

            try {
                // 从身份证号中提取出生日期（第7-14位）
                String birthDateStr = idCard.substring(6, 14);

                // 验证日期格式是否正确
                if (birthDateStr.length() != 8) {
                    studentInfoImport.setJyzt(studentInfoImport.getJyzt() + "  身份证号中出生日期部分格式错误！\n");
                    studentInfoImport.setDrzt("导入失败");
                    continue;
                }

                // 解析为Date类型
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                Date birthDate;
                try {
                    birthDate = sdf.parse(birthDateStr);
                } catch (java.text.ParseException e) {
                    studentInfoImport.setJyzt(studentInfoImport.getJyzt() + "  身份证号中出生日期解析失败，请检查格式！\n");
                    studentInfoImport.setDrzt("导入失败");
                    continue;
                }

                // 设置出生日期到学生信息对象中
                studentInfoImport.setCsrq(birthDate);

            } catch (StringIndexOutOfBoundsException e) {
                studentInfoImport.setJyzt(studentInfoImport.getJyzt() + "  身份证号解析出生日期时发生错误！\n");
                studentInfoImport.setDrzt("导入失败");
            }
        }
    }

    // 毕业年月导入处理
    public static void getByny(List<StudentInfoImport> studentInfoImportList) {
        for (StudentInfoImport studentInfoImport : studentInfoImportList) {
            String bynyStr = studentInfoImport.getBynyText(); // 从Excel读取的文本格式日期

            // 检查毕业年月是否为空
            if (bynyStr == null || bynyStr.trim().isEmpty()) {
                continue;
            }

            try {
                String dateStr = bynyStr.trim();

                // 如果是8位数字格式(yyyyMMdd)，只取前6位年月
                if (dateStr.length() == 8 && dateStr.matches("\\d{8}")) {
                    dateStr = dateStr.substring(0, 6); // 提取年月部分: 20250701 -> 202507
                }
                // 解析日期字符串
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
                Date bynyDate = sdf.parse(dateStr);

                // 设置解析后的日期到对象中
                studentInfoImport.setByny(bynyDate);

            } catch (java.text.ParseException e) {
                // 如果yyyyMM格式解析失败，尝试其他处理方式
                try {
                    // 尝试解析完整8位日期格式
                    SimpleDateFormat fullFormat = new SimpleDateFormat("yyyyMMdd");
                    Date bynyDate = fullFormat.parse(bynyStr.trim());
                    studentInfoImport.setByny(bynyDate);
                } catch (java.text.ParseException e2) {
                    try {
                        // 尝试解析带横线的日期格式
                        SimpleDateFormat hyphenFormat = new SimpleDateFormat("yyyy-MM-dd");
                        Date bynyDate = hyphenFormat.parse(bynyStr.trim());
                        studentInfoImport.setByny(bynyDate);
                    } catch (java.text.ParseException e3) {
                        // 如果所有格式都解析失败，记录错误信息
                        studentInfoImport.setJyzt(studentInfoImport.getJyzt() + "  毕业年月格式错误，请使用正确日期格式！\n");
                        studentInfoImport.setDrzt("导入失败");
                    }
                }
            }
        }
    }
    // 入伍前高校入学年月导入处理
    public static void getRwqrxny(List<StudentInfoImport> studentInfoImportList) {
        for (StudentInfoImport studentInfoImport : studentInfoImportList) {
            String rwqrxnyStr = studentInfoImport.getRwqrxnytxt(); // 从Excel读取的文本格式日期

            // 检查入伍前高校入学年月是否为空
            if (rwqrxnyStr == null || rwqrxnyStr.trim().isEmpty()) {
                continue;
            }

            try {
                String dateStr = rwqrxnyStr.trim();

                // 如果是8位数字格式(yyyyMMdd)，只取前6位年月
                if (dateStr.length() == 8 && dateStr.matches("\\d{8}")) {
                    dateStr = dateStr.substring(0, 6); // 提取年月部分: 20250701 -> 202507
                }
                // 解析日期字符串
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
                Date rwqrxnyDate = sdf.parse(dateStr);

                // 设置解析后的日期到对象中
                studentInfoImport.setRwqrxny(rwqrxnyDate);

            } catch (java.text.ParseException e) {
                // 如果yyyyMM格式解析失败，尝试其他处理方式
                try {
                    // 尝试解析完整8位日期格式
                    SimpleDateFormat fullFormat = new SimpleDateFormat("yyyyMMdd");
                    Date rwqrxnyDate = fullFormat.parse(rwqrxnyStr.trim());
                    studentInfoImport.setRwqrxny(rwqrxnyDate);
                } catch (java.text.ParseException e2) {
                    try {
                        // 尝试解析带横线的日期格式
                        SimpleDateFormat hyphenFormat = new SimpleDateFormat("yyyy-MM-dd");
                        Date rwqrxnyDate = hyphenFormat.parse(rwqrxnyStr.trim());
                        studentInfoImport.setRwqrxny(rwqrxnyDate);
                    } catch (java.text.ParseException e3) {
                        // 如果所有格式都解析失败，记录错误信息
                        studentInfoImport.setJyzt(studentInfoImport.getJyzt() + "  入伍前高校入学年月格式错误，请使用正确日期格式！\n");
                        studentInfoImport.setDrzt("导入失败");
                    }
                }
            }
        }
    }

    // 批准入伍年月导入处理
    public static void getRwny(List<StudentInfoImport> studentInfoImportList) {
        for (StudentInfoImport studentInfoImport : studentInfoImportList) {
            String rwnyStr = studentInfoImport.getRwnytxt(); // 从Excel读取的文本格式日期

            // 检查批准入伍年月是否为空
            if (rwnyStr == null || rwnyStr.trim().isEmpty()) {
                continue;
            }

            try {
                String dateStr = rwnyStr.trim();

                // 如果是8位数字格式(yyyyMMdd)，只取前6位年月
                if (dateStr.length() == 8 && dateStr.matches("\\d{8}")) {
                    dateStr = dateStr.substring(0, 6); // 提取年月部分: 20250701 -> 202507
                }
                // 解析日期字符串
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
                Date rwnyDate = sdf.parse(dateStr);

                // 设置解析后的日期到对象中
                studentInfoImport.setRwny(rwnyDate);

            } catch (java.text.ParseException e) {
                // 如果yyyyMM格式解析失败，尝试其他处理方式
                try {
                    // 尝试解析完整8位日期格式
                    SimpleDateFormat fullFormat = new SimpleDateFormat("yyyyMMdd");
                    Date rwnyDate = fullFormat.parse(rwnyStr.trim());
                    studentInfoImport.setRwny(rwnyDate);
                } catch (java.text.ParseException e2) {
                    try {
                        // 尝试解析带横线的日期格式
                        SimpleDateFormat hyphenFormat = new SimpleDateFormat("yyyy-MM-dd");
                        Date rwnyDate = hyphenFormat.parse(rwnyStr.trim());
                        studentInfoImport.setRwny(rwnyDate);
                    } catch (java.text.ParseException e3) {
                        // 如果所有格式都解析失败，记录错误信息
                        studentInfoImport.setJyzt(studentInfoImport.getJyzt() + "  批准入伍年月格式错误，请使用正确日期格式！\n");
                        studentInfoImport.setDrzt("导入失败");
                    }
                }
            }
        }
    }

    // 批准退役年月导入处理
    public static void getTyny(List<StudentInfoImport> studentInfoImportList) {
        for (StudentInfoImport studentInfoImport : studentInfoImportList) {
            String tynyStr = studentInfoImport.getTynytxt(); // 从Excel读取的文本格式日期

            // 检查批准退役年月是否为空
            if (tynyStr == null || tynyStr.trim().isEmpty()) {
                continue;
            }

            try {
                String dateStr = tynyStr.trim();

                // 如果是8位数字格式(yyyyMMdd)，只取前6位年月
                if (dateStr.length() == 8 && dateStr.matches("\\d{8}")) {
                    dateStr = dateStr.substring(0, 6); // 提取年月部分: 20250701 -> 202507
                }
                // 解析日期字符串
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
                Date tynyDate = sdf.parse(dateStr);

                // 设置解析后的日期到对象中
                studentInfoImport.setTyny(tynyDate);

            } catch (java.text.ParseException e) {
                // 如果yyyyMM格式解析失败，尝试其他处理方式
                try {
                    // 尝试解析完整8位日期格式
                    SimpleDateFormat fullFormat = new SimpleDateFormat("yyyyMMdd");
                    Date tynyDate = fullFormat.parse(tynyStr.trim());
                    studentInfoImport.setTyny(tynyDate);
                } catch (java.text.ParseException e2) {
                    try {
                        // 尝试解析带横线的日期格式
                        SimpleDateFormat hyphenFormat = new SimpleDateFormat("yyyy-MM-dd");
                        Date tynyDate = hyphenFormat.parse(tynyStr.trim());
                        studentInfoImport.setTyny(tynyDate);
                    } catch (java.text.ParseException e3) {
                        // 如果所有格式都解析失败，记录错误信息
                        studentInfoImport.setJyzt(studentInfoImport.getJyzt() + "  批准退役年月格式错误，请使用正确日期格式！\n");
                        studentInfoImport.setDrzt("导入失败");
                    }
                }
            }
        }
    }





}

